package com.perfma.xtest.tool.word;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.Map;

/**
 * 对应center中的ClientDto
 *
 * @author: junhui.si
 * @date: 2021-07-02 12:13
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ClientDTO {
    // ------------------------ 客户端信息 ------------------------

    /**
     * 客户端ID
     */
    private String clientId;
    /**
     * 客户端类型
     */
    private ClientType clientType;
    /**
     * 所在节点名称
     */
    private String nodeName;
    /**
     * 注册时间
     */
    private Date registerTime;
    /**
     * 扩展数据
     */
    private Map<String, Object> extensions;
    /**
     * 地域
     */
    private String region;

    // ------------------------ 用户环境信息 ------------------------

    /**
     * 租户ID
     */
    private Long orgId;
    /**
     * 环境ID
     */
    private Long envId;
    /**
     * 应用ID
     */
    private Long appId;
    /**
     * 应用信息
     */
    private AppDTO appDTO;

    // ------------------------ 进程信息 ------------------------

    /**
     * 进程ID
     */
    private String pid;
    /**
     * 启动类
     */
    private String mainClass;
    /**
     * 启动参数
     */
    private String mainArgs;
    /**
     * jvm参数
     */
    private String jvmArgs;
    /**
     * jvm名称(hotspot,openjdk,ibm,openj9)
     */
    private String jvmName;
    /**
     * jvm版本
     */
    private String jvmVersion;
    /**
     * 堆内存大小(bytes)
     */
    private Long maxHeapSize;
    /**
     * 非堆内存大小(bytes)
     */
    private Long maxNonHeapSize;
    /**
     * 启动时间
     */
    private Long startTime;
    /**
     * 启动用户
     */
    private String startUser;

    // ------------------------ 机器信息 ------------------------

    /**
     * IP地址
     */
    private String ip;
    /**
     * Mac地址
     */
    private String mac;
    /**
     * 主机名
     */
    private String hostName;
    /**
     * 操作系统名称
     */
    private String osName;
    /**
     * 操作系统架构
     */
    private String osArch;
    /**
     * 操作系统版本
     */
    private String osVersion;
    /**
     * CPU总核数
     */
    private Integer cpuCores;
    /**
     * 内存总大小(bytes)
     */
    private Long memorySize;
    /**
     * 虚拟机平台名称(unknown、vm、k8s、mesos、docker、container)
     */
    private String osVmName;
    /**
     * 磁盘大小(bytes)
     */
    private Long diskSize;
    /**
     * 实例状态
     */
    private ClientState state;
    /**
     * 是否是压力机
     */
    private Boolean isStress;

    public boolean isStress() {
        return ClientType.XseaXshark.equals(clientType);
    }
}
